# 序列 ： 列表，元组，字符串都是序列
# 1.都可以通过索引获取每一个元素
# 2.第一个元素的索引都是0
# 3.都可以通过切片的方法获取一个范围
# 4. 都有很多共同的运算符

# 通过是否可以被修改分为：可变序列 跟 不可变序列
# 可变序列：列表
# 不可变序列：字符串，元组

# 序列的加法：将序列拼接
print([1, 2, 3] + [4, 5, 6])  # [1, 2, 3, 4, 5, 6]
print((1, 2, 3) + (4, 5, 6))  # (1, 2, 3, 4, 5, 6)
print("123" + "456")  # 123456

# 序列的乘法：将序列重复
print([1, 2, 3] * 3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]
print((1, 2, 3) * 3)  # (1, 2, 3, 1, 2, 3, 1, 2, 3)
print("123" * 3)  # 123123123

# 增量赋值
s = [1, 2, 3]
# 函数 id() 的功能是返回对象的唯一标识符（identity）。
# 返回对象在内存中的地址（在CPython实现中）
print(id(s))  # 4412622656
s *= 2
print(s)  # [1, 2, 3, 1, 2, 3]
print(id(s))  # 4412622656  内存地址没变！

t = (1, 2, 3)
print(id(t))  # 4314079936
t *= 2
print(t)  # (1, 2, 3, 1, 2, 3)
print(id(t))  # 4413745472 id发生了变化，说明这是另一个对象，因为元组是不可变的

# 同一性运算符：is 和 is not，底层就是判断 id(x) 是否相同
x = "FishC"
y = "FishC"
print(x is y)  # True

x = [1, 2, 3]
y = [1, 2, 3]
print(x is y)  # False

# in 和 not in :包含问题
print("鱼" in "鱼C")  # True
print("C" not in "FishC")  # False

# del 语句：删除一个或者多个指定的对象，还可以删除可变序列中的指定元素
x = "FishC"
y = [1, 2, 3]
del x, y
# print(x) 报错 NameError: name 'x' is not defined
# print(y)

# 还可以删除可变序列中的指定元素
x = [1, 2, 3, 4, 5]
del x[1:4]
print(x)  # [1, 5]

# 切片写法 TODO 不是很懂
y = [1, 2, 3, 4, 5]
y[1:4] = []
print(y)  # [1, 5]

x = [1, 2, 3, 4, 5]
del x[::2]
print(x)  # [2, 4]

x = [1, 2, 3, 4, 5]
x.clear()
print(x)  # []

x = [1, 2, 3, 4, 5]
del x[:]
print(x)  # []
